package com.common.platform.base.consts;

import com.common.platform.base.enums.CommonStartus;
import com.common.platform.base.utils.CoreUtil;

import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import static com.common.platform.base.consts.ConfigConstant.SYSTEM_CONSTANT_PREFIX;
import static com.common.platform.base.utils.CoreUtil.getTempPath;
@Slf4j

public class ConstantsContext {

    private static final String TIPS_END=",若想忽略此提示，请在开发管理->系统配置->参数配置，设置相关参数！";

    /**
     * 所有常量
     */
    private static Map<String,Object> CONSTNTS_HOLDER=new ConcurrentHashMap<>();

    /**
     * 添加常量
     */
    public static void putConstant(String key,Object value){
        if(CoreUtil.isOneEmpty(key,value)){
            return;
        }
        CONSTNTS_HOLDER.put(key,value);
    }

    /**
     * 删除常量
     */
    public static void deleteConstant(String key){
        if(CoreUtil.isOneEmpty(key)){
            return;
        }
        if (!key.startsWith(SYSTEM_CONSTANT_PREFIX)){
            CONSTNTS_HOLDER.remove(key);
        }
    }

    /**
     * 获取系统常量
     */
    public static Map<String,Object> getConstntsHolder(){
        return CONSTNTS_HOLDER;
    }

    /**
     * 获取验证码开关
     */
    public static Boolean getKapchaOpen(){
        String commonPlatformKaptchaOpen=(String) CONSTNTS_HOLDER.get(SYSTEM_CONSTANT_PREFIX+"KAPTCHA_OPEN");
        if(CommonStartus.ENABLE.getCode().equalsIgnoreCase(commonPlatformKaptchaOpen)){
            return true;
        }else{
            return false;
        }

    }

    /**
     * 获取管理系统名称
     */
    public static String getSystemName(){
        String systemName=(String) CONSTNTS_HOLDER.get(SYSTEM_CONSTANT_PREFIX+"SYSTEM_NAME");
        if(CoreUtil.isEmpty(systemName)){
            log.error("管理系统名称不存在！常量名称是："+SYSTEM_CONSTANT_PREFIX+"SYSTEM_NAME"+"!使用默认名称，通用快速后台"+TIPS_END);
            return "通用快速后台";
        }else {
            return systemName;
        }
    }

    /**
     * 获取管理系统密码
     */
    public static String getDefaultPassword(){
        String defaultPassword=(String) CONSTNTS_HOLDER.get(SYSTEM_CONSTANT_PREFIX+"DEFAULT_PASSWORD");
        if(CoreUtil.isEmpty(defaultPassword)){
            log.error("管理系统默认密码不存在！常量名称是："+SYSTEM_CONSTANT_PREFIX+"DEFAULT_PASSWORD"+"!使用默认密码，111111"+TIPS_END);
            return "111111";
        }else {
            return defaultPassword;
        }
    }

    /**
     * 获取管理系统OUTH2用户前缀
     */
    public static String getOauth2UserPrefix() {
        String  oauth2Prefix= (String) CONSTNTS_HOLDER.get(SYSTEM_CONSTANT_PREFIX + "OAUTH2_PREFIX");
        if (CoreUtil.isEmpty(oauth2Prefix)) {
            log.error("管理系统默认OUTH2用户前缀不存在！常量名称是：" + SYSTEM_CONSTANT_PREFIX + "OAUTH2_PREFIX" + "!使用默认前缀:oauth" + TIPS_END);
            return "oauth2";
        } else {
            return oauth2Prefix;
        }
    }

    /**
     * 获取管理系统顶部导航条是否开启
     * @return
     */
    public static boolean getDefaultAvert() {
        String  defaultAdvert= (String) CONSTNTS_HOLDER.get(SYSTEM_CONSTANT_PREFIX + "DEFAULT_ADVERT");
        if (CoreUtil.isEmpty(defaultAdvert)) {
            log.error("管理系统顶部导航条是否开启不存在！常量名称是：" + SYSTEM_CONSTANT_PREFIX + "DEFAULT_ADVERT" + "!使用默认:true" + TIPS_END);
            return true;
        } else {
           if(CommonStartus.ENABLE.getCode().equalsIgnoreCase(defaultAdvert)){
               return true;

           }else {
               return false;
           }
        }
    }


    /**
     * 获取管理系统发布的版本号
     */
    public static String getReleasesVersion() {
        String  releaseVersion= (String) CONSTNTS_HOLDER.get(SYSTEM_CONSTANT_PREFIX + "RELEASE_VERSION");
        if (CoreUtil.isEmpty(releaseVersion)) {
            log.error("管理系统发布的版本号不存在！常量名称是：" + SYSTEM_CONSTANT_PREFIX + "RELEASE_VERSION" + "!使用默认:随机数" + TIPS_END);
            return CoreUtil.getRandomString(8);
        } else {
            return releaseVersion;
        }
    }

    /**
     *获取文件上传路径
     */
    public static String getFileUploadPath() {
        String fileUploadPath = (String) CONSTNTS_HOLDER.get(SYSTEM_CONSTANT_PREFIX + "FILE_UPLOAD_PATH");
        if (CoreUtil.isEmpty(fileUploadPath)) {
            log.error("管理系统发布的文件上传路径不存在！常量名称是:" + SYSTEM_CONSTANT_PREFIX + "FILE_UPLOAD_PATH" + "!采用默认值：系统tmp目录" + TIPS_END);
            return getTempPath();
        } else {
            if (fileUploadPath.endsWith(File.separator))
                fileUploadPath = fileUploadPath + File.separator;
        }
        File file = new File(fileUploadPath);
        if (!file.exists()) {
            boolean mkdirs=file.mkdirs();
            if(mkdirs){
            return fileUploadPath;
        } else {
            log.error("管理系统发布的文件上传路径不存在！常量名称是:" + SYSTEM_CONSTANT_PREFIX + "FILE_UPLOAD_PATH" + "!采用默认值：系统tmp目录" + TIPS_END);
            return getTempPath();
        }
    }else {
            return fileUploadPath;
        }
        }



    }


